9
תגובות

jquery ajax

פתח nirbe ,
שלום,
אני בונה טופס הוספת מאמר שנשלח עם jq ajax,
עכשיו, אחרי שאני שולח המערכת עושה לי שגיאה כזאת:
Request-URI Too Large

The requested URL's length exceeds the capacity limit for this server.


איך אני יכול לסדר את זה?

תודה רבה!

9 תשובות

avatar ענה shlomo120 ב 07 לאוקטובר 2012 #

ככל הנראה אתה שולח את הבקשה בגט. השגיאה אומרת שהמידע שמועבר דרך הURL כלומר הגט גדול מדי. ישנה דרך אחת לפיתרון והיא לשלוח את הבקשה בפוסט...

avatar ענה nirbe ב 07 לאוקטובר 2012 #

ניסיתי ב FROM לשנות את ה action ל post, אבל זה לא עזר.

avatar ענה intval ב 07 לאוקטובר 2012 #

אם אתה שולח בAjax , מה הטעם לשנות משהו בהגדרה של הטופס ?
תשנה את מה שצריך בהגדרה של ה Ajax, לא של הטופס

avatar ענה nirbe ב 07 לאוקטובר 2012 #

אני לא ממש מומחה בזה.
זה הקוד שלי:

$("#ajaxmesbox").hide();
    $("form[name='"+formname+"']").submit(function(){
        var data = $(this).serialize();
        $("#ajaxmesbox").load("includes/ajax/"+tofile+".php", data, function(html){
            if (show) $("#ajaxmesbox").show();
            $(this).html(html);
        });
        return false;

avatar ענה nirbe ב 08 לאוקטובר 2012 #

זה פונקציה, כי אני משתמש בזה כמה פעמים.

avatar ענה intval ב 08 לאוקטובר 2012 #

יש קצת הבדלים בין GET לבין POST.
GET זה כשכול הפרמטרים שלך מועברים בשורת הכתובת
abc.php?a=1&b=2&c=3&d=4&...&e=5
POST זה כשכל הפרמטרים מועברים בתוכן הבקשה, לא בכתובת. והכתובת נשארת פשוט abc.php

השגיאה שקיבלת אומרת
הכתובת שאתה מנסה לגשת אליה - ארוכה מדי.

מכאן נובע שהבקשה שלך נשלחת ב GET, כל הנתומים של הטופס נכתבים בשורת הכתובת והדפדפן או השרת מגבילים את עורך הכתובת המרבי. הפתרון יהיה לשנות את הבקשה ככה, שהנתונים נשלחים ב POST.

הולכים לדוקומנטציה של jquery.load
ומנסים להבין מה הפונקציה הזו עושה ואיך לשנות את הmethod שבו היא משתמשת, ואז מגלים את השורה הבאה:

It is roughly equivalent to $.get(url, data, success)

שבתרגום מאנגלית אומר שהפעולה load שוות ערך לפעולה get ומכאן שהיא שולחת הכל ב GET.
ואז יש לנו שני אופציות. או להפסיק להשתמש ב load ולעבור לשימוש בפונקציה אחרת, נגיד post.$
או לקרוא הלאה ולראות אם אפשר לשנות את ההתנהגות של load.$

ממשיכים לקרוא הלאה ומגלים את השורה הבאה
The POST method is used if data is provided as an object; otherwise, GET is assumed.

אם הפרמטר של הנתונים מועבר בתור אובייקט - הפונקציה משתמשת ב POST, אחרת היא משתמשת ב GET.

בוא נראה איזה פרמטר אנחנו מעבירים לה? אנחנו מעבירים לה את data
ואיך data נוצר?
var data = $(this).serialize();


מה זה סריאליזציה ? זה רישום אובייקט בצורת מחרוזת.
אבל אם אתה לא יודע מה זה, יש לך שני אופציות. א. לשאול, ב. לקרוא מדריכים ב phpguide. יש מדריך שלם על זה.

עכשיו כשאנחנו יודעים ש data זה מחרוזת, ולא אובייקט ובגל זה הפונקציה עושה GET ולא POST
נשאר לברר איך הופכים את זה לאובייקט במקום מחרוזת.
לאן הולכים בשביל זה? נכון מאוד, לקרוא את הדוקמנטציה.

אני כתבתי במחיפוש של הדוקומטציה של jquery את המילה serialize
וקיבלתי את התוצאה הבאה. ראיתי ברשימה את הפונקציה serializeArray ומה היא עושה לאומת serialize רגיל וגיליתי שזה בדיוק מה שאני צריך. היא לוקחת אלמנטים של טופס ומכניסה אותם למערך (שזה אובייקט) במקום מחרוזת.

והדבר היחידי שצריך לשנות בקוד בשביל שהכל יעבוד זה את השורה
var data = $(this).serializeArray();

avatar ענה nirbe ב 08 לאוקטובר 2012 #

השאלה עכשיו איך אני מושך את הנתונים בדף שאליו אני שולח דרך AJAX...

avatar ענה intval ב 08 לאוקטובר 2012 #

echo $_POST['something'];

לא עובד ככה? תבדוק לבד מה יש במערך פוסט, במקום לחכות שלוש שעות לכל תשובה.

avatar ענה nirbe ב 08 לאוקטובר 2012 #

תודה רבה!